home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / email / utils.pyo (.txt) < prev   
Python Compiled Bytecode  |  2008-10-13  |  7KB  |  258 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __all__ = [
  5.     'collapse_rfc2231_value',
  6.     'decode_params',
  7.     'decode_rfc2231',
  8.     'encode_rfc2231',
  9.     'formataddr',
  10.     'formatdate',
  11.     'getaddresses',
  12.     'make_msgid',
  13.     'parseaddr',
  14.     'parsedate',
  15.     'parsedate_tz',
  16.     'unquote']
  17. import os
  18. import re
  19. import time
  20. import base64
  21. import random
  22. import socket
  23. import urllib
  24. import warnings
  25. from cStringIO import StringIO
  26. from email._parseaddr import quote
  27. from email._parseaddr import AddressList as _AddressList
  28. from email._parseaddr import mktime_tz
  29. from email._parseaddr import parsedate as _parsedate
  30. from email._parseaddr import parsedate_tz as _parsedate_tz
  31. from quopri import decodestring as _qdecode
  32. from email.encoders import _bencode, _qencode
  33. COMMASPACE = ', '
  34. EMPTYSTRING = ''
  35. UEMPTYSTRING = u''
  36. CRLF = '\r\n'
  37. TICK = "'"
  38. specialsre = re.compile('[][\\\\()<>@,:;".]')
  39. escapesre = re.compile('[][\\\\()"]')
  40.  
  41. def _identity(s):
  42.     return s
  43.  
  44.  
  45. def _bdecode(s):
  46.     if not s:
  47.         return s
  48.     
  49.     value = base64.decodestring(s)
  50.     if not s.endswith('\n') and value.endswith('\n'):
  51.         return value[:-1]
  52.     
  53.     return value
  54.  
  55.  
  56. def fix_eols(s):
  57.     s = re.sub('(?<!\\r)\\n', CRLF, s)
  58.     s = re.sub('\\r(?!\\n)', CRLF, s)
  59.     return s
  60.  
  61.  
  62. def formataddr(pair):
  63.     (name, address) = pair
  64.     if name:
  65.         quotes = ''
  66.         if specialsre.search(name):
  67.             quotes = '"'
  68.         
  69.         name = escapesre.sub('\\\\\\g<0>', name)
  70.         return '%s%s%s <%s>' % (quotes, name, quotes, address)
  71.     
  72.     return address
  73.  
  74.  
  75. def getaddresses(fieldvalues):
  76.     all = COMMASPACE.join(fieldvalues)
  77.     a = _AddressList(all)
  78.     return a.addresslist
  79.  
  80. ecre = re.compile('\n  =\\?                   # literal =?\n  (?P<charset>[^?]*?)   # non-greedy up to the next ? is the charset\n  \\?                    # literal ?\n  (?P<encoding>[qb])    # either a "q" or a "b", case insensitive\n  \\?                    # literal ?\n  (?P<atom>.*?)         # non-greedy up to the next ?= is the atom\n  \\?=                   # literal ?=\n  ', re.VERBOSE | re.IGNORECASE)
  81.  
  82. def formatdate(timeval = None, localtime = False, usegmt = False):
  83.     if timeval is None:
  84.         timeval = time.time()
  85.     
  86.     if localtime:
  87.         now = time.localtime(timeval)
  88.         if time.daylight and now[-1]:
  89.             offset = time.altzone
  90.         else:
  91.             offset = time.timezone
  92.         (hours, minutes) = divmod(abs(offset), 3600)
  93.         if offset > 0:
  94.             sign = '-'
  95.         else:
  96.             sign = '+'
  97.         zone = '%s%02d%02d' % (sign, hours, minutes // 60)
  98.     else:
  99.         now = time.gmtime(timeval)
  100.         if usegmt:
  101.             zone = 'GMT'
  102.         else:
  103.             zone = '-0000'
  104.     return '%s, %02d %s %04d %02d:%02d:%02d %s' % ([
  105.         'Mon',
  106.         'Tue',
  107.         'Wed',
  108.         'Thu',
  109.         'Fri',
  110.         'Sat',
  111.         'Sun'][now[6]], now[2], [
  112.         'Jan',
  113.         'Feb',
  114.         'Mar',
  115.         'Apr',
  116.         'May',
  117.         'Jun',
  118.         'Jul',
  119.         'Aug',
  120.         'Sep',
  121.         'Oct',
  122.         'Nov',
  123.         'Dec'][now[1] - 1], now[0], now[3], now[4], now[5], zone)
  124.  
  125.  
  126. def make_msgid(idstring = None):
  127.     timeval = time.time()
  128.     utcdate = time.strftime('%Y%m%d%H%M%S', time.gmtime(timeval))
  129.     pid = os.getpid()
  130.     randint = random.randrange(100000)
  131.     if idstring is None:
  132.         idstring = ''
  133.     else:
  134.         idstring = '.' + idstring
  135.     idhost = socket.getfqdn()
  136.     msgid = '<%s.%s.%s%s@%s>' % (utcdate, pid, randint, idstring, idhost)
  137.     return msgid
  138.  
  139.  
  140. def parsedate(data):
  141.     if not data:
  142.         return None
  143.     
  144.     return _parsedate(data)
  145.  
  146.  
  147. def parsedate_tz(data):
  148.     if not data:
  149.         return None
  150.     
  151.     return _parsedate_tz(data)
  152.  
  153.  
  154. def parseaddr(addr):
  155.     addrs = _AddressList(addr).addresslist
  156.     if not addrs:
  157.         return ('', '')
  158.     
  159.     return addrs[0]
  160.  
  161.  
  162. def unquote(str):
  163.     if len(str) > 1:
  164.         if str.startswith('"') and str.endswith('"'):
  165.             return str[1:-1].replace('\\\\', '\\').replace('\\"', '"')
  166.         
  167.         if str.startswith('<') and str.endswith('>'):
  168.             return str[1:-1]
  169.         
  170.     
  171.     return str
  172.  
  173.  
  174. def decode_rfc2231(s):
  175.     parts = s.split(TICK, 2)
  176.     if len(parts) <= 2:
  177.         return (None, None, s)
  178.     
  179.     return parts
  180.  
  181.  
  182. def encode_rfc2231(s, charset = None, language = None):
  183.     import urllib as urllib
  184.     s = urllib.quote(s, safe = '')
  185.     if charset is None and language is None:
  186.         return s
  187.     
  188.     if language is None:
  189.         language = ''
  190.     
  191.     return "%s'%s'%s" % (charset, language, s)
  192.  
  193. rfc2231_continuation = re.compile('^(?P<name>\\w+)\\*((?P<num>[0-9]+)\\*?)?$')
  194.  
  195. def decode_params(params):
  196.     params = params[:]
  197.     new_params = []
  198.     rfc2231_params = { }
  199.     (name, value) = params.pop(0)
  200.     new_params.append((name, value))
  201.     while params:
  202.         (name, value) = params.pop(0)
  203.         if name.endswith('*'):
  204.             encoded = True
  205.         else:
  206.             encoded = False
  207.         value = unquote(value)
  208.         mo = rfc2231_continuation.match(name)
  209.         if mo:
  210.             (name, num) = mo.group('name', 'num')
  211.             if num is not None:
  212.                 num = int(num)
  213.             
  214.             rfc2231_params.setdefault(name, []).append((num, value, encoded))
  215.             continue
  216.         new_params.append((name, '"%s"' % quote(value)))
  217.     if rfc2231_params:
  218.         for name, continuations in rfc2231_params.items():
  219.             value = []
  220.             extended = False
  221.             continuations.sort()
  222.             for num, s, encoded in continuations:
  223.                 if encoded:
  224.                     s = urllib.unquote(s)
  225.                     extended = True
  226.                 
  227.                 value.append(s)
  228.             
  229.             value = quote(EMPTYSTRING.join(value))
  230.             if extended:
  231.                 (charset, language, value) = decode_rfc2231(value)
  232.                 new_params.append((name, (charset, language, '"%s"' % value)))
  233.                 continue
  234.             new_params.append((name, '"%s"' % value))
  235.         
  236.     
  237.     return new_params
  238.  
  239.  
  240. def collapse_rfc2231_value(value, errors = 'replace', fallback_charset = 'us-ascii'):
  241.     if isinstance(value, tuple):
  242.         rawval = unquote(value[2])
  243.         if not value[0]:
  244.             pass
  245.         charset = 'us-ascii'
  246.         
  247.         try:
  248.             return unicode(rawval, charset, errors)
  249.         except LookupError:
  250.             return unicode(rawval, fallback_charset, errors)
  251.         except:
  252.             None<EXCEPTION MATCH>LookupError
  253.         
  254.  
  255.     None<EXCEPTION MATCH>LookupError
  256.     return unquote(value)
  257.  
  258.